//package net.jsoft.pms.web.oracle.plan;
//
//import java.io.IOException;
//import java.io.OutputStream;
//import java.io.UnsupportedEncodingException;
//import java.net.URLEncoder;
//import java.text.NumberFormat;
//import java.text.ParseException;
//import java.text.SimpleDateFormat;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//import javax.annotation.Resource;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import javax.servlet.http.HttpSession;
//
//import org.apache.commons.lang3.StringUtils;
//import org.apache.poi.ss.usermodel.CellType;
//import org.apache.poi.xssf.usermodel.XSSFCellStyle;
//import org.apache.poi.xssf.usermodel.XSSFRow;
//import org.apache.poi.xssf.usermodel.XSSFSheet;
//import org.apache.poi.xssf.usermodel.XSSFWorkbook;
//import org.springframework.stereotype.Controller;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RequestParam;
//import org.springframework.web.bind.annotation.ResponseBody;
//import org.springframework.web.multipart.MultipartFile;
//
//import net.jsoft.platform.core.web.BaseController;
//import net.jsoft.pms.service.oracle.plan.IPlanService;
//import net.jsoft.pms.service.oracle.problems.IProblemsService;
//import net.jsoft.pms.vo.plan.PlanTaskInfo;
//
///**
// * 计划管理控制器
// *
// * @author John
// * @Date 2017-08-03 15:51:51
// */
//@Controller
//@RequestMapping("/plan")
//@SuppressWarnings("unchecked")
//public class PlanController extends BaseController
//{
//
//    private String PREFIX = "/pms/oracle/plan/";
//
//    private static final String COMMON_DATE = "yyyy-MM-dd";
//    private SimpleDateFormat sdf = new SimpleDateFormat(COMMON_DATE);
//
//    @Resource(name = "planServiceImpl")
//    private IPlanService service;
//
//    @Resource(name = "problemsServiceImpl")
//    IProblemsService s;
//
//    private String type = "DB";
//
//    /**
//     * 跳转到计划管理首页
//     */
//    @RequestMapping("")
//    public String index()
//    {
//        return PREFIX + "plan.html";
//    }
//
//    @RequestMapping("/tasksPage")
//    public String tasksPage()
//    {
//        return PREFIX + "tasksPage";
//    }
//
//    /**
//     * 跳转到计划管理首页
//     */
//    @RequestMapping("/topdesk")
//    @ResponseBody
//    public Map<String, Object> topdesk()
//    {
//        Map<String, Object> resp = new HashMap<String, Object>();
//        // 获取所有工作计划
//        List<PlanTaskInfo> tasks = null;
//        if ("DB".equals(type))
//        {
//            tasks = service.getAllTasksByDB();
//        }
//        else
//        {
//            tasks = (List<PlanTaskInfo>) service.getAllTasks().get("planTasks");
//        }
//
//        Map<String, List<PlanTaskInfo>> tempMap = service.groupbyFinishFlag(tasks);
//        resp.put("allTaskFinished", tempMap.get("finished"));
//        resp.put("allTaskUnFinished", tempMap.get("unfinished"));
//        resp.put("allTasks", tasks);
//        resp.put("allTasksByGroup", service.groupTasks(tasks));
//        resp.put("allTaskFinishedByGroup", service.groupTasks(tempMap.get("finished")));
//        resp.put("allTaskUnFinishedByGroup", service.groupTasks(tempMap.get("unfinished")));
//
//        Map<String, Date> days = service.getDays(null);
//        Map<String, String> daystr = new HashMap<String, String>();
//        for (String k : days.keySet())
//        {
//            daystr.put(k, sdf.format(days.get(k)));
//        }
//
//        resp.putAll(daystr);
//        // 上周任务
//        List<PlanTaskInfo> lastWeek = service.getPeriodTasks(tasks, days.get("lastWeekMonday"), days.get("lastWeekSunday"));
//        resp.put("lastWeek", lastWeek);
//        tempMap = service.groupbyFinishFlag(lastWeek);
//        resp.put("lastWeekFinished", tempMap.get("finished"));
//        resp.put("lastWeekUnFinished", tempMap.get("unfinished"));
//
//        resp.put("lastWeekByGroup", service.groupTasks(lastWeek));
//        resp.put("lastWeekFinishedByGroup", service.groupTasks(tempMap.get("finished")));
//        resp.put("lastWeekUnFinishedByGroup", service.groupTasks(tempMap.get("unfinished")));
//
//        tempMap = service.groupbyPlanType(lastWeek);
//        resp.put("lastWeekPlaned", tempMap.get("planed"));
//        resp.put("lastWeekUnPlaned", tempMap.get("unplaned"));
//        resp.put("lastWeekPlanedByGroup", service.groupTasks(tempMap.get("planed")));
//        resp.put("lastWeekUnPlanedByGroup", service.groupTasks(tempMap.get("unplaned")));
//
//        // 本周任务
//        List<PlanTaskInfo> thisWeek = service.getPeriodTasks(tasks, days.get("thisWeekMonday"), days.get("thisWeekSunday"));
//        resp.put("thisWeek", thisWeek);
//        tempMap = service.groupbyFinishFlag(thisWeek);
//        resp.put("thisWeekFinished", tempMap.get("finished"));
//        resp.put("thisWeekUnFinished", tempMap.get("unfinished"));
//
//        resp.put("thisWeekByGroup", service.groupTasks(thisWeek));
//        resp.put("thisWeekFinishedByGroup", service.groupTasks(tempMap.get("finished")));
//        resp.put("thisWeekUnFinishedByGroup", service.groupTasks(tempMap.get("unfinished")));
//
//        tempMap = service.groupbyPlanType(thisWeek);
//        resp.put("thisWeekPlaned", tempMap.get("planed"));
//        resp.put("thisWeekUnPlaned", tempMap.get("unplaned"));
//        resp.put("thisWeekPlanedByGroup", service.groupTasks(tempMap.get("planed")));
//        resp.put("thisWeekUnPlanedByGroup", service.groupTasks(tempMap.get("unplaned")));
//
//        // 下周任务
//        List<PlanTaskInfo> nextWeek = service.getPeriodTasks(tasks, days.get("nextWeekMonday"), days.get("nextWeekSunday"));
//        resp.put("nextWeek", nextWeek);
//        tempMap = service.groupbyFinishFlag(nextWeek);
//        resp.put("nextWeekFinished", tempMap.get("finished"));
//        resp.put("nextWeekUnFinished", tempMap.get("unfinished"));
//
//        resp.put("nextWeekByGroup", service.groupTasks(nextWeek));
//        resp.put("nextWeekFinishedByGroup", service.groupTasks(tempMap.get("finished")));
//        resp.put("nextWeekUnFinishedByGroup", service.groupTasks(tempMap.get("unfinished")));
//        // 延期任务
//        Date yearStart = null;
//        try
//        {
//            yearStart = sdf.parse("2017-01-01");
//        }
//        catch (ParseException e)
//        {
//            e.printStackTrace();
//        }
//
//        List<PlanTaskInfo> dalayTasksTemp = service.getPeriodTasks(tasks, yearStart, days.get("nextWeekMonday"));
//        List<PlanTaskInfo> dalayTasks = new ArrayList<PlanTaskInfo>();
//        for (PlanTaskInfo p : dalayTasksTemp)
//        {
//            if ("未完成".equals(p.getFinishFlag()) && p.getEarlyFinish().before(days.get("thisWeekMonday")))
//            {
//                dalayTasks.add(p);
//            }
//        }
//        resp.put("dalayTasks", dalayTasks);
//        resp.put("dalayTasksByGroup", service.groupTasks(dalayTasks));
//        return resp;
//
//    }
//
//    @RequestMapping(value = "/uploadFile")
//    public void importFile(HttpServletRequest req, @RequestParam(value = "planFile") MultipartFile file) throws Exception
//    {
//        //判断文件是否为空
//        if (file == null)
//        {
//            throw new Exception("文件为空");
//        }
//
//        //获取文件名
//        String fileName = file.getOriginalFilename();
//
//        //进一步判断文件内容是否为空（即判断其大小是否为0或其名称是否为null）
//        long size = file.getSize();
//        if (StringUtils.isEmpty(fileName) || size == 0)
//        {
//            throw new Exception("文件不能为空！");
//        }
//
//        //批量导入
//        service.batchImport(file.getInputStream());
//
//    }
//
//    // 导出excel方法
//    @SuppressWarnings(
//    { "resource" })
//    @RequestMapping("/exportExcel")
//    public void exportExcel(HttpServletRequest request, HttpServletResponse response)
//    {
//        HttpSession session = request.getSession();
//        session.setAttribute("state", null);
//        // 生成提示信息，
//        response.setContentType("application/vnd.ms-excel");
//        String codedFileName = null;
//        OutputStream fOut = null;
//
//        try
//        {
//
//            NumberFormat numberFormat = NumberFormat.getInstance();
//            numberFormat.setMaximumFractionDigits(2);
//
//            Map<String, Object> map = topdesk();
//
//            List<PlanTaskInfo> thisWeek = (List<PlanTaskInfo>) map.get("thisWeek");
//            List<PlanTaskInfo> thisWeekFinished = (List<PlanTaskInfo>) map.get("thisWeekFinished");
//            List<PlanTaskInfo> thisWeekUnFinished = (List<PlanTaskInfo>) map.get("thisWeekUnFinished");
//            List<PlanTaskInfo> nextWeek = (List<PlanTaskInfo>) map.get("nextWeek");
//            List<PlanTaskInfo> nextWeekFinished = (List<PlanTaskInfo>) map.get("nextWeekFinished");
//            List<PlanTaskInfo> nextWeekUnFinished = (List<PlanTaskInfo>) map.get("nextWeekUnFinished");
//            List<PlanTaskInfo> allTasks = (List<PlanTaskInfo>) map.get("allTasks");
//            List<PlanTaskInfo> allTaskFinished = (List<PlanTaskInfo>) map.get("allTaskFinished");
//            List<PlanTaskInfo> allTaskUnFinished = (List<PlanTaskInfo>) map.get("allTaskUnFinished");
//
//            // 进行转码，使其支持中文文件名
//            codedFileName = URLEncoder.encode(map.get("thisWeekMonday").toString().replaceAll("-", "") + "-" + map.get("thisWeekSunday").toString().replaceAll("-", "") + "计划完成情况", "UTF-8");
//            response.setHeader("content-disposition", "attachment;filename=" + codedFileName + ".xlsx");
//            // 产生工作簿对象
//            XSSFWorkbook workbook = new XSSFWorkbook();
//
//            XSSFCellStyle cellStyle = workbook.createCellStyle();
//            cellStyle.setWrapText(true);
//
//            //计划概要
//            XSSFSheet sheet0 = workbook.createSheet("计划概要");
//            XSSFRow row = sheet0.createRow(4);// 创建一行
//            row.setRowStyle(cellStyle);
//
//            row.createCell(2, CellType.STRING).setCellValue("日期");
//            row.createCell(3, CellType.STRING).setCellValue("计划完成");
//            row.createCell(4, CellType.STRING).setCellValue("实际完成");
//            row.createCell(5, CellType.STRING).setCellValue("未完成");
//            row.createCell(6, CellType.STRING).setCellValue("完成率");
//
//            row = sheet0.createRow(5);// 创建一行
//            row.setRowStyle(cellStyle);
//            row.createCell(2, CellType.STRING).setCellValue(map.get("thisWeekMonday") + "-" + map.get("thisWeekSunday"));
//            row.createCell(3, CellType.STRING).setCellValue(thisWeek.size() + "");
//            row.createCell(4, CellType.STRING).setCellValue(thisWeekFinished.size() + "");
//            row.createCell(5, CellType.STRING).setCellValue(thisWeekUnFinished.size() + "");
//            row.createCell(6, CellType.STRING).setCellValue(numberFormat.format((float) thisWeekFinished.size() / (float) thisWeek.size() * 100) + "%");
//
//            row = sheet0.createRow(6);// 创建一行
//            row.setRowStyle(cellStyle);
//            row.createCell(2, CellType.STRING).setCellValue(map.get("nextWeekMonday") + "-" + map.get("nextWeekSunday"));
//            row.createCell(3, CellType.STRING).setCellValue(nextWeek.size() + "");
//            row.createCell(4, CellType.STRING).setCellValue(nextWeekFinished.size() + "");
//            row.createCell(5, CellType.STRING).setCellValue(nextWeekUnFinished.size() + "");
//            row.createCell(6, CellType.STRING).setCellValue(numberFormat.format((float) nextWeekFinished.size() / (float) nextWeek.size() * 100) + "%");
//
//            row = sheet0.createRow(7);// 创建一行
//            row.setRowStyle(cellStyle);
//            row.createCell(2, CellType.STRING).setCellValue("总体计划");
//            row.createCell(3, CellType.STRING).setCellValue(allTasks.size() + "");
//            row.createCell(4, CellType.STRING).setCellValue(allTaskFinished.size() + "");
//            row.createCell(5, CellType.STRING).setCellValue(allTaskUnFinished.size() + "");
//            row.createCell(6, CellType.STRING).setCellValue(numberFormat.format((float) allTaskFinished.size() / (float) allTasks.size() * 100) + "%");
//
//            //本周计划
//            // 产生工作表对象
//            XSSFSheet sheet1 = workbook.createSheet("本周计划");
//            int i = 1;
//
//            row = sheet1.createRow(0);// 创建一行
//            row.setRowStyle(cellStyle);
//            row.createCell(0, CellType.STRING).setCellValue("计划名称");
//            row.createCell(1, CellType.STRING).setCellValue("组别");
//            row.createCell(2, CellType.STRING).setCellValue("处理人员");
//            row.createCell(3, CellType.STRING).setCellValue("开始时间");
//            row.createCell(4, CellType.STRING).setCellValue("完成时间");
//            row.createCell(5, CellType.STRING).setCellValue("问题管理平台编号");
//            row.createCell(6, CellType.STRING).setCellValue("完成情况");
//            row.createCell(7, CellType.STRING).setCellValue("备注");
//
//            for (PlanTaskInfo p : thisWeek)
//            {
//                row = sheet1.createRow(i);// 创建一行
//                row.setRowStyle(cellStyle);
//                row.createCell(0, CellType.STRING).setCellValue(p.getName());
//                row.createCell(1, CellType.STRING).setCellValue(p.getGroupName());
//                row.createCell(2, CellType.STRING).setCellValue(p.getResourceName());
//                row.createCell(3, CellType.STRING).setCellValue(sdf.format(p.getEarlyStart()));
//                row.createCell(4, CellType.STRING).setCellValue(sdf.format(p.getEarlyFinish()));
//                row.createCell(5, CellType.STRING).setCellValue(p.getProblemsId());
//                row.createCell(6, CellType.STRING).setCellValue(p.getFinishFlag());
//                row.createCell(7, CellType.STRING).setCellValue(p.getNotes());
//                i++;
//            }
//
//            //下周计划
//
//            XSSFSheet sheet2 = workbook.createSheet("下周计划");
//            i = 1;
//
//            row = sheet2.createRow(0);// 创建一行
//            row.setRowStyle(cellStyle);
//            row.createCell(0, CellType.STRING).setCellValue("计划名称");
//            row.createCell(1, CellType.STRING).setCellValue("组别");
//            row.createCell(2, CellType.STRING).setCellValue("处理人员");
//            row.createCell(3, CellType.STRING).setCellValue("开始时间");
//            row.createCell(4, CellType.STRING).setCellValue("完成时间");
//            row.createCell(5, CellType.STRING).setCellValue("问题管理平台编号");
//            row.createCell(6, CellType.STRING).setCellValue("完成情况");
//            row.createCell(7, CellType.STRING).setCellValue("备注");
//
//            for (PlanTaskInfo p : nextWeek)
//            {
//                row = sheet2.createRow(i);// 创建一行
//                row.setRowStyle(cellStyle);
//                row.createCell(0, CellType.STRING).setCellValue(p.getName());
//                row.createCell(1, CellType.STRING).setCellValue(p.getGroupName());
//                row.createCell(2, CellType.STRING).setCellValue(p.getResourceName());
//                row.createCell(3, CellType.STRING).setCellValue(sdf.format(p.getEarlyStart()));
//                row.createCell(4, CellType.STRING).setCellValue(sdf.format(p.getEarlyFinish()));
//                row.createCell(5, CellType.STRING).setCellValue(p.getProblemsId());
//                row.createCell(6, CellType.STRING).setCellValue(p.getFinishFlag());
//                row.createCell(7, CellType.STRING).setCellValue(p.getNotes());
//                i++;
//            }
//
//            fOut = response.getOutputStream();
//            workbook.write(fOut);
//        }
//        catch (UnsupportedEncodingException e1)
//        {
//        }
//        catch (Exception e)
//        {
//        }
//        finally
//        {
//            try
//            {
//                if (fOut != null)
//                {
//                    fOut.flush();
//                    fOut.close();
//                }
//            }
//            catch (IOException e)
//            {
//            }
//            session.setAttribute("state", "open");
//        }
//    }
//
//}
